//
//  PropertyView.swift
//  swiftStudy
//
//  Created by ext.zhangjunfei on 2021/7/8.
//

import SwiftUI

struct PropertyView: View {
    
    let code_1: String
    let code_2: String
    
    init() {
        code_1 =
            """
            class Work{
                //工作名称
                var work:String
                
                init(work:String) {
                    print("工作被初始化了")
                    self.work = work
                }
                
                func doWork() {
                    print("开始执行:\\(work)")
                }
            }


            class Person{
                //声明类的属性
                var name:String
                //声明延时属性，只用调用到这个属性的时候才执行初始化操作
                lazy var work = Work(work: "搬砖")
                
                init(name:String) {
                    self.name = name
                }
            }

            var  per = Person(name: "Zhang")

            per.work.doWork()
            """
        
        code_2 =
            """
            class Circle{
                //半径
                var r:Double
                //圆心
                var center:(Double,Double)
                
                init(r:Double,center:(Double,Double)) {
                    self.r = r
                    self.center = center
                }
                
                //周长，通过半径计算
                var l:Double{
                    get{
                        return 2*r*Double.pi
                    }
                    set{
                        r = newValue/2/Double.pi
                    }
                }
                
                //计算面积,如果只有get没有set可以简化写法
                var s:Double{
                    return r*r*Double.pi
                }                
            }

            //根据半径计算周长
            var circle = Circle(r: 10, center: (0, 0))
            print(circle.l)

            //根据周长，从新计算半径
            circle.l = 100
            print(circle.r)
            """
    }
    
    var body: some View {
        
        ScrollView {
            
            LazyVStack(alignment: HorizontalAlignment.leading, spacing: 10) {
                
                Section(header: SectionHeaderView(title: "存储属性与计算属性")) {
                    
                    CommonTextView(content: "Swift语言的属性从行为上可以分为存储属性与计算属性两类。存储属性与计算属性的区别在于：存储属性用于描述存储值，计算属性用于描述计算过程并获得计算结果。")
                    
                    CommonTextView(content: "存储属性用于定义类或结构体的某些特征，简单来说：存储属性就是用变量或常量存储某些有意义的值。")
                    
                    CommonTextView(content: "关于存储属性，Swift语言中支持将存储属性设置为延时存储属性，只有当开发者调用类实例的这个属性的时候，此属性才完成构造初始化操作。")
                    
                    CodeView(code: code_1).padding(10)
                    
                    CommonTextView(content: "与存储属性相比，计算属性更像是运算过程，Swift提供了计算属性，用来描述这种可以由其他属性通过计算而得到的属性。")
                    
                    CodeView(code: code_2).padding(10)
                }
            }
        }
    }
}

struct PropertyView_Previews: PreviewProvider {
    static var previews: some View {
        PropertyView()
    }
}
